﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

//1.转义字符补充
//int main() {
//	int len = strlen("c:\test\class111\123.c");
//	printf("%d\n", len);
//
//	return 0;
//}
//\t,\123均为转义字符
//特别注意：\c虽然不是转义字符，但是编译器识别时把\c当成了转义字符
//但是转义完成后不会产生太大效果，结果还是c


//2.内置数据类型之布尔类型(0为假,非0为真)
//int main() {
//	_Bool flag = true;
//	if (flag) {
//		printf("haha\n");
//	}
//	else {
//		printf("hehe\n");
//	}
//
//	return 0;
//}


//3.signed和unsigned
//signed和unsigned关键字是用来修饰字符型和整型类型的（只有这两种类型）
//int main() {
//	int num = 10;
//	//默认为signed int,可以写成int num与signed num都可以
//	signed Temp1 = 30;
//	signed int Temp2 = -30;
//
//	printf("%d\n", Temp1);
//
//	unsigned int Temp3 = 20;
//
//	return 0;
//}
//signed		用来修饰的变量中既可以存放正整数也可以存放负整数
//unsigned		用来修饰的变量中只能存放0和正整数


//4.每⼀种数据类型有⾃⼰的取值范围，也就是存储的数值的最⼤值和最⼩值的区间，
//那么每一种数据类型所占的内存空间大小是多少呢？
//我们通过sizeof来计算
//sizeof是一个操作符，计算的是变量所占内存的大小，单位是字节
//也可以理解为计算的是什么类型创建的变量所占内存的大小，单位是字节
//int main() {
//	printf("%zd\n", sizeof(char));		//1
//	printf("%zd\n", sizeof(short));		//2
//	printf("%zd\n", sizeof(int));		//4
//	printf("%zd\n", sizeof(long));		//4
//	printf("%zd\n", sizeof(long long));	//8
//	printf("%zd\n", sizeof(float));		//4
//	printf("%zd\n", sizeof(double));		//8
//	printf("%zd\n", sizeof(long double));//8
//
//	return 0;
//}
//计算机中常见的单位
//bit	--	比特位		C语言中中最小的单位
//Byte	--	字节		1Byte=8bit
//KB					1KB=1024M
//MB					1MB=1024GB
//GB					1GB=1024TB
//TB					1TB=1024PB
//PB					
//空间越大，可以存放的数据也越多
//size_t是一种专门为sizeof设置的一个类型
//size_t的本质是unsigned int
size_t;
//size_t类型再打印的时候，格式应该使用%zd

//长整形为什么和整形一样长？
//C语言标准规定：
//sizeof(long)>=sizeof(int)

//5.我们使⽤类型做什么呢？类型是⽤来创建变量的
//int main() {
//	//变量的创建
//	//int weight;
//	//char ch;
//	//float score;
//	//short age;
//
//	//初始化：变量在创建的时候就给⼀个初始值，就叫初始化。
//	int weight = 59;
//	char ch = 'a';
//	float score = 98.51f;
//	short age = 20;
//
//	return 0;
//}


//6.变量的分类:全局变量 局部变量
//int g_val = 2023;//全局变量
//int main() {
//	int a = 10;
//	{
//		int b = 20;
//		printf("%d\n", b);//局部变量只能在局部作用域内使用
//		printf("%d\n", g_val);//全部变量在项目任何地方都可以使用
//	}
//	//printf("%d\n", b);
//	printf("%d\n", g_val);
//
//	return 0;
//}

//当局部变量和全局变量同名的时候，局部变量优先使⽤。
//int main() {
//	int a = 10;
//	{
//		int a = 20;
//		printf("%d\n", a);
//	}
//	printf("%d\n", a);
//
//	return 0;
//}


//6.算术操作符：+、-、*、/、%
//int main() {
//	int a = 3 + 4;
//	printf("%d\n", a);
//	int b = 3 - 4;
//	printf("%d\n", b);
//	int c = 3 * 4;
//	printf("%d\n", c);
// 
//	//除号的两端如果是整数，执⾏的是整数除法，得到的结果也是整数，只会返回整数部分，丢弃⼩数部分。
//	int d = 8 / 2;
//	printf("%d\n", d);
//	//如果希望得到浮点数的结果，两个运算数必须⾄少有⼀个浮点数，就会进⾏浮点数除法
//	int e = 7 / 2.0;
//	printf("%d\n", e);
//	return 0;
//}

//int main()
//{
//	int score = 5;
//	score = (score / 20.0f) * 100;
//	printf("%d\n", score);
//
//	return 0;
//}

//% 表⽰求模运算，即返回两个整数相除的余值。这个运算符只能⽤于整数，不能⽤于浮点数。
//int main()
//{
//	int x = 7 % 3; // 1
//	printf("%d\n", x);
//
//	return 0;
//}
//负数求模的规则是，结果的正负号由第⼀个运算数的正负号决定。
//int main()
//{
//	printf("%d\n", 11 % -5); // 1
//	printf("%d\n", -11 % -5); // -1
//	printf("%d\n", -11 % 5); // -1
//	return 0;
//}

//7.赋值操作符
//在变量创建的时候给⼀个初始值叫初始化;在变量创建好后，再给⼀个值，这叫赋值
//int main()
//{
//	int a = 100;//初始化
//	a = 200;//赋值，这⾥使⽤的就是赋值操作符
//
//	return 0;
//}

//赋值操作符的连续赋值
//int main()
//{
//	int a = 3;
//	int b = 5;
//	int c = 0;
//	c = b = a + 3;//连续赋值，从右向左依次赋值的。
//
//	return 0;
//}
//虽然可以这样写，但是不推荐，建议还是拆开来写

//复合赋值符：对⼀个数进⾏⾃增、⾃减
//int main()
//{
//	int a = 10;
//	a = a + 3;
//	a = a - 2;
//
//	return 0;
//}


//8.单⽬操作符：++、--、+、-
//前置++:先+1，后使⽤；
//int main()
//{
//	int a = 10;
//	int b = ++a;//放在a的前⾯的，前置++
//	printf("a=%d b=%d\n", a, b);
//
//	return 0;
//}
//后置++:先使⽤，后+1
//int main()
//{
//	int a = 10;
//	int b = a;
//	a = a + 1;
//	printf("a=%d b=%d\n", a, b);//放在a的后⾯的，后置++
//
//	return 0;
//}
//前置--和后置--同理

//+和-（+是正号，-是负号）按照数学方法运算
//int main() {
//	int a = +10;//等价于 int a = 10;
//
//	int b = -10;
//	int c = -b;
//	printf("b=%d\n", c);//10
//
//	return 0;
//}


//9.制类型转换
int main() {
	int a = 3.14;
	int a = (int)3.14; //将3.14强制类型转换为int类型，这种强制类型转换只取整数部分

	return 0;
}
//不到是万不得已的时候不推荐使⽤